#include "stc8g.h"
#include "intrins.h"
#include <string.h>
#include "type.h"
#include "uart.h"
#include "i2c.h"
#include "aht20.h"
#include "bmp280.h"
#include "eeprom.h"



// 函数：等待查询
// 参数：温度指针temp，湿度指针humi，压力指针pressure
void wait_forQuery(float* temp, float* humi, uint32_t* pressure, UserParams *params) {
    // 定义字符串数组
    char str[55];
    // 定义循环变量
    unsigned int i, j;
    // 定义状态和数据
    unsigned char status,_data;
    // 循环1000次
    for(i = 0; i < 1000; i++) {
        // 循环1000次
        for(j = 0; j < 200; j++) {
            // 获取状态和数据
            status =  Uart_status(&_data);
            // 如果状态为1
            if(status == 1){
                if(_data == params->Addr) { // 如果数据等于当前地址
                    // 将温度、湿度和压力格式化为字符串
                    sprintf(str, "{ \"Addr\": %d,  \"Temp\": %.2f, \"Humi\": %.2f, \"Pressure\": %ld}\r\n",(int)_data, *temp, *humi, *pressure);
                    // 发送字符串
                    UART_SendString(str);
                }
            }
            // 如果状态为2
            if(status == 2) {
                // 将地址格式化为字符串
                sprintf(str, "set address: %d\r\n", (int)_data);
                params->Addr = _data;
                SaveUserParams(params, 0x00); // 保存用户参数到EEPROM
                // 发送字符串
                UART_SendString(str);
            }
            // 如果状态为3
            if(status == 3) {
                // 将当前地址格式化为字符串
                sprintf(str, "current address : %d\r\n", (int)params->Addr);
                // 发送字符串
                UART_SendString(str);
            }
            if(status == 4) {
                // 将当前波特率格式化为字符串
                sprintf(str, "current Band : %d\r\n", (int)params->Band);
                // 发送字符串
                UART_SendString(str);
            }
            // 如果状态为5
            if(status == 5) {
                sprintf(str, "set Band : %d\r\n", (int)_data);
                params->Band = _data;
                SaveUserParams(params, 0x00); // 保存用户参数到EEPROM
                // 发送字符串
                UART_SendString(str);
            }
        }
    }
    //sprintf(str, "running : %d", (int)100);
    // 发送字符串
   // UART_SendString(str);
    // Delay1s(); // 延时1秒
}



void main() {
    //char str[55];
	  UserParams  param;
    float temp=0, humi=0;
    uint32_t pressure = 0;
    // 初始化IAP等待时间
    IAP_TPS = 12; // 根据系统时钟设置

    LoadUserParams(&param, 0x00); // 从EEPROM加载用户参数

   
    UART_Init(param.Band); // 初始化UART，波特率为115200
	ATH20_Init();
    bmp280_init();
    // max3485 的发送使得引脚  p3.2
    P3M0 |= 0x04; 
    P3M1 &= ~0x04; 
	  
	
    // P3M0 &= ~0x08; 
    // P3M1 &= ~0x08; 

	Timer0_Init();


    // 修正485默认地址
    if(param.Addr == 0xFF) {
        param.Addr = 0x01;
    }

   //测试代码
    P32 = 0;
	

    while(1) {
			AHT20_Read(&temp, &humi);            
            bmp280_get_pressure(&pressure);
			// if(rst==1) {
			// 	sprintf(str, "{\"Temp\": %.2f, \"Humi\": %.2f, \"Pressure\": %ld}", temp, humi, pressure);
            //     UART_SendString(str);
			// }
    //   sprintf(str, "current address : %2d \r\n", (int)55);
    //   UART_SendString(str);
        wait_forQuery(&temp, &humi, &pressure, &param);
			// Delay1s();
    }
}